/* This program is free software: you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
package org.opentripplanner.api.thrift;
import lombok.Data;
import org.apache.thrift.protocol.TBinaryProtocol;
import org.apache.thrift.protocol.TProtocolFactory;
import org.apache.thrift.server.TServer;
import org.apache.thrift.server.TThreadPoolServer;
import org.apache.thrift.transport.TNonblockingServerSocket;
import org.apache.thrift.transport.TNonblockingServerTransport;
import org.apache.thrift.transport.TServerSocket;
import org.apache.thrift.transport.TServerTransport;
import org.apache.thrift.transport.TTransportException;
import org.opentripplanner.api.thrift.definition.OTPService;
import org.opentripplanner.api.thrift.impl.OTPServiceImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Data
public class OTPServerTask implements Runnable {
private static Logger LOG = LoggerFactory.getLogger(OTPServerTask.class);
private OTPServiceImpl otpServiceImpl;
private int port;
public void run() {
LOG.info("Run called, port {}", port);
if (otpServiceImpl == null) {
LOG.warn("otpServiceImpl is null, bailing");
return;
}
try {
OTPService.Processor<OTPServiceImpl> processor = new OTPService.Processor<OTPServiceImpl>(
otpServiceImpl);
// TODO(flamholz): make the transport, protocol and server type be configurable?
TServerTransport serverTransport = new TServerSocket(port);
TProtocolFactory protocolFactory = new TBinaryProtocol.Factory(true, true);
TThreadPoolServer.Args args = new TThreadPoolServer.Args(serverTransport)
.processor(processor)
.protocolFactory(protocolFactory);
TServer server = new TThreadPoolServer(args);
LOG.info("Starting the OTPService on port {}", port);
server.serve();
} catch (TTransportException e) {
e.printStackTrace();
}
}
}